﻿#define _CRT_SECURE_NO_WARNINGS 1
// 原题连接：https://ac.nowcoder.com/acm/problem/229310
/*
题目描述：
链接：https://ac.nowcoder.com/acm/problem/229310
来源：牛客网

dd作为集训队的队长，一直掌管着集训室的空调遥控器，她需要调整温度使队员们更好地进入训练状态，已知集训室一共有
𝑛
n名队员，每位队员都有一个温度诉求
𝑎
[
𝑖
]
(
1
≤
𝑖
≤
𝑛
)
a[i](1≤i≤n)，当室内温度为
𝐾
K时，当且仅当
∣
𝑎
[
𝑖
]
−
𝐾
∣
≤
𝑝
∣a[i]−K∣≤p时，这个队员能够正常进入训练状态，否则就会开始躁动，作为队长，
𝑑
𝑑
dd需要调整好温度，她想知道，在最佳情况下，最多有多少队员同时进入训练状态
输入描述:
第一行两个数n,p(1≤n,p≤1000000),含义如题面描述
接下来一行n个数a[i](1≤a[i]≤1000000)表示每个队员的温度诉求
输出描述:
输出一个数字，表示最多有多少队员同时进入训练状态
示例1
输入
复制
6 2
1 5 3 2 4 6
输出
复制
5
说明
温度调成3或4，都可以满足5名队员同时进入训练状态
*/


#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
// 开始解题：
// 方法——排序 + 二分
const int N = 1e6 + 10;
int nums[N];
int n = 0, p = 0;

int main() {
    scanf("%d%d", &n, &p);
    int _min = 0x3f3f3f3f, _max = -1;
    for (int i = 0; i < n; i++) {
        scanf("%d", &nums[i]);
        _min = min(_min, nums[i]);
        _max = max(_max, nums[i]);
    }
    // 排序
    sort(nums, nums + n);
    int ret = 0;
    // 枚举k
    for (int k = _min; k <= _max; k++) {
        // 使用二分来查询当温度处于k时，有多少个队员能够进入状态
        // 对于每个k，只需要找出[k - p, k + p]区间内有多少个队员就行了
        int begin = -1, end = -1;
        int left = 0, right = n - 1;
        // 先找左端点
        while (left < right) {
            int mid = (left + right) >> 1;
            if (nums[mid] < k - p) {
                left = mid + 1;
            }
            else {
                right = mid;
            }
        }
        if (nums[right] >= k - p) {
            begin = right;
        }
        // 再找右端点
        if (begin != -1) {
            left = 0, right = n - 1;
            while (left < right) {
                int mid = (left + right + 1) >> 1;
                if (nums[mid] > k + p) {
                    right = mid - 1;
                }
                else {
                    left = mid;
                }
            }
            end = left;
            ret = max(ret, end - begin + 1);
        }
    }
    cout << ret << endl;
    return 0;
}